{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 什么是线性代数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "感觉要学习数学，先有一个大局观，能方便不少。\n",
    "\n",
    "要是学了一年的线性代数，回过头来人家问你“线性代数为啥叫线性代数啊？”都答不上来，那会的概念技巧再多，终究还是有欠缺，学习的过程也只会是盲人摸象，摸到啥算啥。\n",
    "\n",
    "先粗略地了解一下现代数学体系——有哪些分支？各分支研究的是啥？各分支之间的关系？有没有应用？回答了这些问题，也就初步构建了一个大局观。\n",
    "林达华在[在数学的海洋中飘荡](https://dahuasky.wordpress.com/2009/01/22/%E5%9C%A8%E6%95%B0%E5%AD%A6%E7%9A%84%E6%B5%B7%E6%B4%8B%E4%B8%AD%E9%A3%98%E8%8D%A1/)中说「作为计算机的学生，我（原作者）没有任何企图要成为一个数学家。我学习数学的目的，是要想爬上巨人的肩膀，希望站在更高的高度，能把我自己研究的东西看得更深广一些。」我作为一名普普通通的~~想要成为一名算法工程师的学生~~SRE 工程师，也是同样的想法。我学数学的目的是为了应用它，不是研究它。有一个大局观，能让我们站在更高的地方看问题。\n",
    "\n",
    "## **代数：一个抽象的世界**\n",
    "有一个说法把现代数学分成三大分支：**分析、代数和几何**，可见代数在现代数学中的地位。\n",
    "\n",
    ">代数——名称上研究的似乎是数，在我看来，主要研究的是运算规则。一门代数，其实都是从某种具体的运算体系中抽象出一些基本规则，建立一个公理体系，然后在这基础上进行研究。一个集合再加上一套运算规则，就构成一个代数结构。在主要的代数结构中，最简单的是群(Group)——它只有一种符合结合律的可逆运算，通常叫“乘法”。如果这种运算也符合交换律，那么就叫阿贝尔群 (Abelian Group)。如果有两种运算，一种叫加法，满足交换律和结合律，一种叫乘法，满足结合律，它们之间满足分配律，这种丰富一点的结构叫做环(Ring)，如果环上的乘法满足交换律，就叫可交换环(Commutative Ring)。如果，一个环的加法和乘法具有了所有的良好性质，那么就成为一个域(Field)。基于域，我们可以建立一种新的结构，能进行加法和数乘，就构成了线性代数(Linear algebra)。\n",
    "代数的好处在于，它只关心运算规则的演绎，而不管参与运算的对象。只要定义恰当，完全可以让一只猫乘以一只狗得到一头猪:-)。基于抽象运算规则得到的所有定理完全可以运用于上面说的猫狗乘法。当然，在实际运用中，我们还是希望用它干点有意义的事情。学过抽象代数的都知道，基于几条最简单的规则，比如结合律，就能导出非常多的重要结论——这些结论可以应用到一切满足这些简单规则的地 方——这是代数的威力所在，我们不再需要为每一个具体领域重新建立这么多的定理。             -- 林达华\n",
    "\n",
    "Algebra 被翻译成**代数**，可以理解成用符号来代替数来做研究的学问，在中学所学的初等代数中，这么理解很直观。\n",
    "而现代数学中，**Algebra**这个词表示的是**代数结构**（先定义一种元素，一个这种元素的集合再加上一套运算规则，就构成一个代数结构），而不是单纯的“代替数”。\n",
    "\n",
    "## **线性代数：“线性”的基础地位**\n",
    "\n",
    ">对于做Learning, vision, optimization或者statistics的人来说，接触最多的莫过于线性代数——这也是我们在大学低年级就开始学习的。线性代数，包括建立在它基础上的各种学科，**最核心的两个概念是向量空间和线性变换**。线性变换在线性代数中的地位，和连续函数在分析中的地位，或者同态映射在群论中的地位是一样的 ——它是保持基础运算（加法和数乘）的映射。\n",
    "在learning中有这样的一种倾向——鄙视线性算法，标榜非线性。也许在很多场合下面，我们需要非线性来描述复杂的现实世界，但是无论什么时候，线性都是具有根本地位的。没有线性的基础，就不可能存在所谓的非线性推广。我们常用的非线性化的方法包括流形和kernelization，这两者都需要在某个阶段回归线性。流形需要在每个局部建立与线性空间的映射，通过把许多局部线性空间连接起来形成非线性；而kernerlization则是通过置换内积结构把原线性空间“非线性”地映射到另外一个线性空间，再进行线性空间中所能进行的操作。而在分析领域，线性的运算更是无处不在，微分，积分，傅立叶变换，拉普拉斯变换，还有统计中的均值，通通都是线性的。             -- 林达华\n",
    "\n",
    "线性代数，起源于对一次方程组的解的研究。\n",
    "\n",
    "线性一词最初来源于二元一次方程，它的解在直角坐标系中绘成一条直线，故称线性。\n",
    "更一般的，n元一次方程组的解在n维直角坐标系中形成 n-1 维的超平面。而**线性（[Linearity](https://en.wikipedia.org/wiki/Linearity)）**一词也被更一般化: 满足\n",
    "\n",
    "1. **可加性**：$f(x + y) = f(x) + f(y)$\n",
    "1. **一次齐次性（[Homogeneity](https://en.wikipedia.org/wiki/Homogeneous_function)）**：\n",
    "    - $f(\\alpha x) = \\alpha^{k}f(x)$，“一次”就是说 $k = 1$。\n",
    "    - 齐次：通俗点说就是次数要“齐”，要一致。比如一次方程，全都是一次项，所以是“一次齐次”的。\n",
    "\n",
    "的函数，就被称为线性函数/线性映射/线性变换。（自变量可以是数值、向量、矩阵等“代数结构”）\n",
    "\n",
    "把一次方程的等式左边看成一个函数，它是满足这个定义的，因此一次方程又被称为线性方程。\n",
    "线性代数中常用的一个概念——**线性组合（[Linear Combination](https://en.wikipedia.org/wiki/Linear_combination)）**，组合方式也满足线性的定义，所以叫线性组合。\n",
    "\n",
    "理解“线性代数”的“线性”，也知道了“代数”指的是“代数结构”，这下终于能够回答最初的那个问题了：“线性代数为啥叫线性代数？” 线性代数是研究某种代数结构的线性变换的学问，主要研究线性操作的表达、化简、分类等。例如向量和矩阵上的线性操作。\n",
    "\n",
    "以上就是查了这么多资料，得到的一点个人想法。不过我的数学一向不是很好，有错误也说不定。。嘛～～个人笔记就无所谓了。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 参考\n",
    "\n",
    "- [《线性代数》重点--从CS的角度](https://www.jianshu.com/p/8a23995322b4)\n",
    "- [理解矩阵](https://blog.csdn.net/myan/article/details/647511)\n",
    "- [在数学的海洋中飘荡 - 林达华](https://dahuasky.wordpress.com/2009/01/22/%E5%9C%A8%E6%95%B0%E5%AD%A6%E7%9A%84%E6%B5%B7%E6%B4%8B%E4%B8%AD%E9%A3%98%E8%8D%A1/)\n",
    "- [代数、几何、分析 各自的范畴 - 豆瓣](https://www.douban.com/note/246430462/)\n",
    "- [Algebra - wikipedia](https://en.wikipedia.org/wiki/Algebra)\n",
    "- [什么是「齐次」，「非齐次」，「线性」，「非线性」？- 知乎](https://www.zhihu.com/question/19816504)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
